home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 24
/
Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso
/
Aminet
/
util
/
cdity
/
IFX.lha
/
IFX
/
prefs
/
ifx.e
< prev
next >
Wrap
Text File
|
1997-12-03
|
31KB
|
1,284 lines
->
-> prefs.e
->
-> An attempt at using GadTools to do the IFX preferences
-> program.
->
-> Modules
MODULE 'dos', 'dos/dos', 'dos/dosextens', 'dos/dostags'
MODULE 'asl', 'libraries/asl'
MODULE 'intuition', 'intuition/intuition', 'intuition/gadgetclass',
'intuition/screens'
MODULE 'graphics', 'graphics/text'
MODULE 'gadtools', 'libraries/gadtools'
MODULE 'exec/ports'
MODULE 'utility/tagitem'
MODULE 'exec/obj/list', 'exec/obj/node'
MODULE 'other/split'
MODULE '*/modules/action', '*/speak/speak'
MODULE 'amigalib/tasks'
MODULE 'tools/sound'
MODULE 'fabio/rxobj_oo'
->
-> Object definitions
->
-> ID
OBJECT ifx_id OF node
list :PTR TO list -> Action list
ENDOBJECT
-> Action
OBJECT ifx_action OF node
type :PTR TO CHAR
ENDOBJECT
-> Gadget ID's
ENUM LV_IDS,
LV_ACTS,
BUT_DONE,
BUT_SAVE,
BUT_CANCEL,
BUT_ADDID,
BUT_REMID,
BUT_ADDACT,
BUT_REMACT,
BUT_OKAYID,
BUT_OKAYACT,
BUT_CANCELACT,
BUT_FILEREQ,
BUT_TESTACT,
BUT_EDITIDS,
STR_INFO,
STR_ID,
STR_DIR,
CY_TYPE,
ID_DUMMY
-> Gadget objects
DEF lv_ids :PTR TO gadget,
lv_acts :PTR TO gadget,
but_save :PTR TO gadget,
but_cancel :PTR TO gadget,
but_done :PTR TO gadget,
but_okayid :PTR TO gadget,
but_addid :PTR TO gadget,
but_remid :PTR TO gadget,
but_addact :PTR TO gadget,
but_remact :PTR TO gadget,
but_filereq :PTR TO gadget,
but_testact :PTR TO gadget,
str_info :PTR TO gadget,
str_id :PTR TO gadget,
str_dir :PTR TO gadget,
cy_type :PTR TO gadget,
but_okayact :PTR TO gadget
-> Global variables
-> Font
DEF topaz80:PTR TO textattr
-> Sounds
DEF sounds:PTR TO LONG, curr
-> Ids
DEF ids:PTR TO list
-> Port
DEF g_mp:PTR TO mp
-> Current ID and Action
DEF id_curr:PTR TO ifx_id, act_curr:PTR TO ifx_action
-> Last directory name
DEF last_dir:PTR TO CHAR, def_dir:PTR TO CHAR
-> ASL Requester
DEF asl:PTR TO filerequester
-> Directory locks
DEF olddir, curdir
-> MAIN
PROC main() HANDLE
DEF font
-> First, find our current directory
olddir := CurrentDir(NIL)
-> Allocate sounds space
NEW sounds[2]
-> Create our ids list
NEW ids.init()
IF ids=NIL THEN Throw("MEM", ' (for IDS list)')
-> Create our global message port
g_mp := CreateMsgPort()
IF g_mp=NIL THEN Throw("INIT", ' (message port)')
-> Load the configuration
IF load_config() THEN put_error('Unable to open prefs file.\n')
-> Open ASL
IF aslbase=NIL THEN aslbase := OpenLibrary('asl.library', 37)
IF aslbase=NIL /* Still */ THEN RETURN FALSE
-> Open Gadtools
IF gadtoolsbase=NIL THEN gadtoolsbase := OpenLibrary('gadtools.library', 37)
IF gadtoolsbase=NIL /* Still */ THEN RETURN FALSE
-> Open Datatypes
IF datatypesbase=NIL THEN datatypesbase := OpenLibrary('datatypes.library', 0)
-> Initialize some stuff
topaz80 := ['topaz.font', 8, 0, 0]:textattr -> Default font
-> Create the ASL requester here!
asl := AllocAslRequest(ASL_FILEREQUEST,
[ASL_HAIL, 'Select A File',
NIL, NIL])
-> Open the font, to make sure it's possible
IF (font := OpenFont(topaz80))<>NIL
-> Do the stuff
dowindow({maingadgets})
-> Close the font
CloseFont(font)
ELSE
put_error('Unable to open topaz font!\n')
ENDIF
IF asl THEN FreeAslRequest(asl)
EXCEPT DO
IF font THEN CloseFont(font)
IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
gadtoolsbase := NIL
IF aslbase THEN CloseLibrary(aslbase)
aslbase := NIL
IF datatypesbase THEN CloseLibrary(datatypesbase)
datatypesbase := NIL
IF olddir THEN CurrentDir(olddir)
IF curdir THEN UnLock(curdir)
ENDPROC
PROC dowindow(makegadgets)
DEF myscr :PTR TO screen,
mywin :PTR TO window,
glist :PTR TO gadget,
gad :LONG,
userdata :LONG,
done=0 :LONG,
vi :LONG
-> Lock the public screen
IF (myscr := LockPubScreen(NIL))<>NIL
-> Get visual info
IF (vi := GetVisualInfoA(myscr, [TAG_END, NIL]))<>NIL
gad := makegadgets(myscr, vi, {glist})
IF gad
-> Open the window
IF (mywin := OpenWindowTagList(NIL,
[WA_TITLE, 'IFX Preferences V2.00',
WA_GADGETS, glist,
WA_AUTOADJUST, TRUE,
WA_WIDTH, 480,
WA_INNERHEIGHT, 130,
WA_DRAGBAR, 1,
WA_CLOSEGADGET, 1,
WA_DEPTHGADGET, 1,
WA_ACTIVATE, 1,
WA_SIMPLEREFRESH, 1,
WA_IDCMP, IDCMP_CLOSEWINDOW OR
IDCMP_REFRESHWINDOW OR
IDCMP_VANILLAKEY OR
LISTVIEWIDCMP OR
BUTTONIDCMP OR
STRINGIDCMP OR
CYCLEIDCMP,
WA_PUBSCREEN, myscr,
NIL, NIL]))<>NIL
-> Set userdata
mywin.userdata := makegadgets
-> Refresh the gadgets
Gt_RefreshWindow(mywin, NIL)
WHILE done=NIL
-> Do that gadget/message THANG..
makegadgets := handlewindow(mywin, userdata)
IF makegadgets
-> Free up the old gadgets
RemoveGList(mywin, glist, 0)
FreeGadgets(glist)
-> Make the new gadgets
gad := makegadgets(myscr, vi, {glist})
IF gad
-> Add the gadgets
AddGList( mywin, glist, -1, -1, NIL )
-> Erase the old gadgets
EraseRect(mywin.rport, mywin.borderleft, mywin.bordertop, mywin.width-mywin.borderright-1, mywin.height-mywin.borderbottom-1)
-> Draw the new ones
RefreshGadgets(glist, mywin, NIL)
-> Refresh'em for fun!
Gt_RefreshWindow(mywin, NIL)
ELSE
done := 1
ENDIF
ELSE
done := 1
ENDIF
ENDWHILE
-> Close the window
CloseWindow(mywin)
ELSE
put_error('Unable to open window!\n')
ENDIF
ELSE
put_error('Unable to create gadgets!\n')
ENDIF
FreeGadgets(glist)
FreeVisualInfo(vi)
ELSE
put_error('Unable to get visual info!\n')
ENDIF
UnlockPubScreen(NIL, myscr)
ELSE
put_error('Unable to lock public screen!\n')
ENDIF
ENDPROC
PROC handlewindow(win:PTR TO window, userdata)
DEF imsg:PTR TO intuimessage,
class, code, id, object, gad:PTR TO gadget,
ifx:PTR TO ifx_id, act:PTR TO ifx_action,
rx:PTR TO rxobj,
obj:PTR TO node,
thwin:PTR TO window,
temp:PTR TO CHAR,
done=NIL
WHILE done=NIL
WaitPort(win.userport)
WHILE (imsg := Gt_GetIMsg(win.userport))<>NIL
class := imsg.class
code := imsg.code
object := imsg.iaddress
thwin := imsg.idcmpwindow
SELECT class
CASE IDCMP_REFRESHWINDOW
-> Refresh the window and its gadgets
Gt_BeginRefresh(thwin)
Gt_EndRefresh(thwin, 1)
CASE IDCMP_GADGETDOWN
CASE IDCMP_MOUSEMOVE
CASE IDCMP_GADGETUP
gad := object
id := gad.gadgetid
gadgethit:
SELECT id
CASE LV_IDS
IF lv_ids THEN killlist(lv_ids, win)
id_curr := entrynum(ids, code)
done := {idgadgets}
CASE LV_ACTS
IF id_curr
IF lv_acts THEN killlist(lv_acts, win)
act_curr := entrynum(id_curr.list, code)
done := {actgadgets}
ENDIF
CASE BUT_DONE
done := {maingadgets}
CASE BUT_SAVE
-> Save the config
IF save_config()=-1 THEN put_error('Save failed!')
-> Inform IFX
NEW rx.rxobj('IFXPREFS')
rx.send('PLAY', 'prefs', NIL, NIL)
END rx
done := -1
CASE BUT_CANCEL
IF ask('Are you sure you want\nto exit without saving?', win)
-> Yes
done := -1
ELSE
-> No
ENDIF
CASE BUT_OKAYID
IF id_curr AND str_id
-> Read the new string
END id_curr.name
obj := str_id.specialinfo::stringinfo.buffer
IF obj
NEW id_curr.name[StrLen(obj)+1]
StrCopy(id_curr.name, obj)
ENDIF
-> Nullify the id
id_curr := NIL
ELSE
put_error('DEBUG: Error @ 289')
ENDIF
done := {idsgadgets}
CASE BUT_ADDID
killlist(lv_ids, win)
id_curr := newid('new_id')